package com.smartwasser.yunhtgl.apphtgl.network;


import com.smartwasser.yunhtgl.apphtgl.bean.BaseBean;
import com.smartwasser.yunhtgl.apphtgl.bean.CaseCensor1Bean;
import com.smartwasser.yunhtgl.apphtgl.bean.CaseProcess1Bean;
import com.smartwasser.yunhtgl.apphtgl.bean.CaseProcess2Bean;
import com.smartwasser.yunhtgl.apphtgl.bean.CompanyBean;
import com.smartwasser.yunhtgl.apphtgl.bean.FlMessageBean;
import com.smartwasser.yunhtgl.apphtgl.bean.LoginBean;
import com.smartwasser.yunhtgl.apphtgl.bean.SP1Bean;
import com.smartwasser.yunhtgl.apphtgl.bean.SP3Bean;
import com.smartwasser.yunhtgl.apphtgl.bean.SP5Bean;
import com.smartwasser.yunhtgl.apphtgl.bean.SPGreat1Bean;
import com.smartwasser.yunhtgl.apphtgl.bean.SPGreat3Bean;
import com.smartwasser.yunhtgl.apphtgl.bean.SPGreat4Bean;
import com.smartwasser.yunhtgl.apphtgl.bean.SPGreat5Bean;
import com.smartwasser.yunhtgl.apphtgl.bean.SPNormal3Bean;
import com.smartwasser.yunhtgl.apphtgl.bean.UpdateVersionBean;
import com.smartwasser.yunhtgl.apphtgl.bean.UserMessages;

import java.net.Authenticator;
import java.util.List;
import java.util.Map;

import okhttp3.MultipartBody;
import okhttp3.RequestBody;
import retrofit2.http.GET;
import retrofit2.http.Multipart;
import retrofit2.http.POST;
import retrofit2.http.Part;
import retrofit2.http.PartMap;
import retrofit2.http.Path;
import retrofit2.http.Query;
import rx.Observable;

public interface RetrofitApi {

    /**
     * 登陆
     *
     * @param username
     * @param password
     * @return
     */
    @POST("a/mobile/login")
    Observable<LoginBean> login(@Query("username") String username,
                                @Query("password") String password);

    /**
     * 个人信息
     *
     * @param JSESSIONID
     * @return
     */
    @GET("a/mobile/getUser;JSESSIONID={JSESSIONID}")
    Observable<UserMessages> getUserMessages(@Path("JSESSIONID") String JSESSIONID);

    /**
     * 个人处理合同列表
     *
     * @param JSESSIONID
     * @param pageNo
     * @param category
     * @param procurementMode
     * @param handleType
     * @return
     */
    @POST("a/mobile/contractbaseinfo/buDwcContractBaseInfo/list;JSESSIONID={JSESSIONID}")
    Observable<SP1Bean> getType1Sp102(@Path("JSESSIONID") String JSESSIONID,
                                      @Query("pageNo") int pageNo,
                                      @Query("category") String category,
                                      @Query("procurementMode") String procurementMode,
                                      @Query("handleType") String handleType,
                                      @Query("pageSize") int pageSize);

    /**
     * 已归档合同列表
     *
     * @param JSESSIONID
     * @param pageNo
     * @param category
     * @param procurementMode
     * @param moneyRange
     * @param pageSize
     * @return
     */

    @POST("a/mobile/htsp/ygdht/buContractBaseInfoGdController/list;JSESSIONID={JSESSIONID}")
    Observable<SP3Bean> getType1Sp2(@Path("JSESSIONID") String JSESSIONID,
                                    @Query("pageNo") int pageNo,
                                    @Query("category") String category,
                                    @Query("procurementMode") String procurementMode,
                                    @Query("moneyRange") String moneyRange,
                                    @Query("pageSize") int pageSize);

    /**
     * 待完成合同列表
     *
     * @param JSESSIONID
     * @param pageNo
     * @param category
     * @param procurementMode
     * @param moneyRange
     * @param pageSize
     * @return
     */

    @POST("a/mobile/contractbaseinfo/buDwcContractBaseInfo/allDwclist;JSESSIONID={JSESSIONID}")
    Observable<SP5Bean> getType1Sp5(@Path("JSESSIONID") String JSESSIONID,
                                    @Query("pageNo") int pageNo,
                                    @Query("category") String category,
                                    @Query("procurementMode") String procurementMode,
                                    @Query("moneyRange") String moneyRange,
                                    @Query("pageSize") int pageSize);

    /**
     * 已终止合同列表
     *
     * @param JSESSIONID
     * @param pageNo
     * @param category
     * @param procurementMode
     * @param moneyRange
     * @param pageSize
     * @return
     */
    @POST("a/mobile/htsp/yzzht/buYzzContractController/list;JSESSIONID={JSESSIONID}")
    Observable<SP1Bean> getType1Sp3(@Path("JSESSIONID") String JSESSIONID,
                                    @Query("pageNo") int pageNo,
                                    @Query("category") String category,
                                    @Query("procurementMode") String procurementMode,
                                    @Query("moneyRange") String moneyRange,
                                    @Query("pageSize") int pageSize);

    /**
     * 待完成合同详情
     *
     * @param JSESSIONID
     * @param id
     * @return
     */
    @POST("a/mobile/contractbaseinfo/buDwcContractBaseInfo/view;JSESSIONID={JSESSIONID}")
    Observable<SPGreat1Bean> getType1Sp1Great(@Path("JSESSIONID") String JSESSIONID,
                                              @Query("id") String id);

    /**
     * 待完成合同详情
     *
     * @param JSESSIONID
     * @param id
     * @return
     */
    @POST("a/mobile/contractbaseinfo/buDwcContractBaseInfo/view;JSESSIONID={JSESSIONID}")
    Observable<SPGreat5Bean> getType1Sp1GreatGd(@Path("JSESSIONID") String JSESSIONID,
                                                @Query("id") String id);

    /**
     * 已归档合同详情
     *
     * @param JSESSIONID
     * @param id
     * @return
     */
    @POST("a/mobile/htsp/ygdht/buContractBaseInfoGdController/view;JSESSIONID={JSESSIONID}")
    Observable<SPGreat3Bean> getType1Sp1Great3(@Path("JSESSIONID") String JSESSIONID,
                                               @Query("id") String id);

    /**
     * 已归档一般合同详情
     *
     * @param JSESSIONID
     * @param id
     * @return
     */
    @POST("a/mobile/htsp/ygdht/buContractBaseInfoGdController/view;JSESSIONID={JSESSIONID}")
    Observable<SPNormal3Bean> getType1Sp1Normal3(@Path("JSESSIONID") String JSESSIONID,
                                                 @Query("id") String id);

    /**
     * 已终止合同详情
     *
     * @param JSESSIONID
     * @param id
     * @return
     */
    @POST("a/mobile/htsp/yzzht/buYzzContractController/view;JSESSIONID={JSESSIONID}")
    Observable<SPGreat4Bean> getType1Sp1Great4(@Path("JSESSIONID") String JSESSIONID,
                                               @Query("id") String id);

    /**
     * 待完成备案列表
     *
     * @param JSESSIONID
     * @param pageNo
     * @param category
     * @param roleCode
     * @return
     */
    @POST("a/mobile/htba/dwcList;JSESSIONID={JSESSIONID}")
    Observable<CaseProcess1Bean> getCaseProcess1(@Path("JSESSIONID") String JSESSIONID,
                                                 @Query("year") String pageNo,
                                                 @Query("quarter") String category,
                                                 @Query("roleCode") String roleCode);

    /**
     * 已完成备案列表
     *
     * @param JSESSIONID
     * @param pageNo
     * @param category
     * @param roleCode
     * @return
     */
    @POST("a/mobile/htba/ywcList;JSESSIONID={JSESSIONID}")
    Observable<CaseProcess2Bean> getCaseProcess2(@Path("JSESSIONID") String JSESSIONID,
                                                 @Query("year") String pageNo,
                                                 @Query("quarter") String category,
                                                 @Query("roleCode") String roleCode);

    /**
     * 合同备案审核详情
     *
     * @param JSESSIONID
     * @param id
     * @return
     */
    @POST("a/mobile/htba/view;JSESSIONID={JSESSIONID}")
    Observable<CaseCensor1Bean> getCaseCensor(@Path("JSESSIONID") String JSESSIONID,
                                              @Query("id") String id);

    /**
     * 全部单位
     *
     * @param JSESSIONID
     * @return
     */
    @GET("a/mobile/htba/treeData;JSESSIONID={JSESSIONID}")
    Observable<CompanyBean> getCompany(@Path("JSESSIONID") String JSESSIONID);

    /**
     * 备案详情审核
     *
     * @param JSESSIONID
     * @param flagF
     * @param comment
     * @return
     */
    @POST("a/mobile/htba/rew;JSESSIONID={JSESSIONID}")
    Observable<Object> shMessage(@Path("JSESSIONID") String JSESSIONID,
                                 @Query("ids") String ids,
                                 @Query("flagF") String flagF,
                                 @Query("comment") String comment);

    /**
     * 法律意见书
     *
     * @return
     */
    @POST("a/mobile/contractbaseinfo/buDwcContractBaseInfo/getFlyjslist;JSESSIONID={JSESSIONID}")
    Observable<FlMessageBean> getFlMessage(@Path("JSESSIONID") String JSESSIONID);

    /**
     * 个人未完成详情审核
     *
     * @param JSESSIONID
     * @param id
     * @param flag
     * @param comment
     * @param shouzhiType
     * @param type
     * @param legalOpinionBook
     * @return
     */
    @POST("a/mobile/contractbaseinfo/buDwcContractBaseInfo/doCheck;JSESSIONID={JSESSIONID}")
    Observable<BaseBean> commitSP(@Path("JSESSIONID") String JSESSIONID,
                                  @Query("id") String id,
                                  @Query("act.flag") String flag,
                                  @Query("act.comment") String comment,
                                  @Query("shouzhiType ") String shouzhiType,
                                  @Query("type") String type,
                                  @Query("legalOpinionBook  ") String legalOpinionBook);

    /**
     * 个人未完成详情审核(归档审核)
     *
     * @param JSESSIONID
     * @param id
     * @param flag
     * @param comment
     * @param shouzhiType
     * @param type
     * @param legalOpinionBook
     * @return
     */
    @POST("a/mobile/contractbaseinfo/buDwcContractBaseInfo/doFileCheck;JSESSIONID={JSESSIONID}")
    Observable<BaseBean> commitSP1(@Path("JSESSIONID") String JSESSIONID,
                                   @Query("id") String id,
                                   @Query("act.flag") String flag,
                                   @Query("act.comment") String comment,
                                   @Query("shouzhiType ") String shouzhiType,
                                   @Query("type") String type,
                                   @Query("legalOpinionBook  ") String legalOpinionBook);


    @Multipart
    @POST("a/mobile/contractbaseinfo/buDwcContractBaseInfo/applyfileCheck;JSESSIONID={JSESSIONID}")
    Observable<BaseBean> updatePhoto(@Path("JSESSIONID") String JSESSIONID, @Query("id") String id, @Query("act.procInsId") String procInsId,
                                    @PartMap Map<String, RequestBody> params);


    /**
     *
     */
    @GET("5a2f633f548b7a47350000ce?api_token=b102224df80c93cb5f0d502e91f2b69c")
    Observable<UpdateVersionBean> getVersion();


}
//     @Part() MultipartBody.Part[] file